from flask  import Flask
from flask_sqlalchemy   import SQLAlchemy
import config

app = Flask(__name__)
app.config.update({
    'DEBUG': True,
    'TEMPLATES_AUTO_RELOAD': True
})

# 1. 使用flask_sqlalchemy中的SQLAlchemy进行初始化.
app.config.from_object(config)
db = SQLAlchemy(app)

# 3. 测试连接数据库是否正常.
# db.create_all()

# article表:
'''
create table article(
    id int primary key autoincrement,
    title varchar(100) not null,
    content text not null,
)
'''

'''
模型需要继承自`db.Model`, 然后需要映射到表中的属性,必须写成`db.Column`的数据类型.
1. 数据类型: 
- `db.Integer`代表的是整型,
- `db.String`代表`varchar`,需要指定最长的长度.
- `db.Text`代表`text`.

2. 其他参数:
- primary_key: 将这个字段设置为主键.
- autoincrement: 这个主键为自增长.
- nullable: 这个字段是否可以为空,默认可以为空,可将这个值设置为False.

3. 最后需要调用`db.create_all`来讲模型真正的创建到数据库中.
'''

class Article(db.Model):
    __tablename__='article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)

db.create_all()

@app.route('/')
def index():
    return '使用Flask-sqlalchemy进行数据增删改查操作.'

@app.route('/Insert/')
def Insert():
    # 添加数据:
    article1 = Article(title='aaa',content='bbb')
    db.session.add(article1)
    # 事务
    db.session.commit()
    return "添加数据成功"

@app.route('/Select/')
def SelEct():
    # 查找数据
    # select * from article where title='aaa';
    # result = Article.query.filter(Article.title == 'aaa').all()
    # article1 = result[0]
    # print(result)
    article1 = Article.query.filter(Article.title == 'aaa').first()
    print('title:{}'.format(article1.title))
    print('content:{}'.format(article1.content))
    return "查找数据成功"

@app.route('/Update/')
def UpDate():
    # 更改数据
    # 1. 先把要更改的数据查找出来.
    article1 = Article.query.filter(Article.title == 'aaa').first()
    # 2. 把这条数据,需要修改的地方进行修改.
    article1.title = 'new title'
    # 3. 做事务的提交.
    db.session.commit()
    return "更改数据成功"
    
@app.route('/DeLete/')  
def DeLete():
    # 删除数据
    # 1. 把需要删除的数据查找出来.
    article1 = Article.query.filter(Article.content == 'bbb').first()
    # 2. 把这条数据删除掉
    db.session.delete(article1)
    # 3. 做事务的提交
    db.session.commit()
    return "删除一条数据成功"

if __name__ == "__main__":
    app.run(debug=True)
